- spring (two horizontal lines with a spring shape in between).
Click on OK to accept the changes or Cancel to ignore them.
4.2.3 Monster editing mode
————————————————————
This mode allows you to see where the monsters are, and the movement bounds
and initial direction and speed of one of them.
4.2.3.1 Selecting, placing, and removing monsters
—————————————————————————————————————————
Clicking Select over a monster selects it. Its movement bounds are drawn as a
white rectangle, and its animation sequence, initial direction and speed are
shown in the toolbox.
Click anywhere else and a new one is created (up to a maximum of eight). New
monsters acquire the currenly selected animation sequence, don't move, and
have their movement bounds set to the minimum.
If you then drag Select, you can easily reposition the monster.
The arrow icons either side of the current animation sequence icon step
through the available sequences. This does not change the sequence used for
the currently selected monster!
'Delete', well, deletes the current monster, unless it has a special function
(guard or finish - see §6.2 "The room editing menu"). If there are events attached to this monster, they will also be deleted - you will be told should
this happen.
4.2.3.2 Movement bounds
———————————————
Movement bounds are set by clicking (or dragging) Adjust in the room editing
window. Exactly which bounds are set depends on where the pointer is relative
to the monster: for example, click above it to set its upper bound.
The bounds can be set to their minimum values by clicking within the monster
according to this diagram:
TL TT TT TR
LL -- -- RR
LL -- -- RR
BL BB BB BR
where each pair represents a 4*4 block of pixels (remember all monster
sprites are 16*16 pixels), T=upper bound, B=lower bound, L=left bound,
R=right bound. Only the bound(s) shown for a particular part of the monster
is (are) set.
Fine control over the bounds and the monster position is accessed by clicking
Shift-Adjust over the room editing window. The box thus opened (as a menu)
contains several pairs of arrow icons, a box, and a sprite in the centre. The
box represents the movement bounds. These are alterable in unit steps by
clicking on the arrows outside the box: eg. to move the left bound one unit
right, click Select on the right arrow to the left of the box. One unit is
equal to the monster's speed along the appropriate axis (if zero, it defaults
to 2 horizontally or 1 vertically). The four arrows within the box allow you
to adjust the initial position of the monster.
At present, adjusting the movement bounds causes a redraw of the area
enclosed by the bounds; moving the monster causes a complete redraw.
If you decide to edit the sprites making up the current animation sequence,
then double-click on the sequence icon - this will export the appropriate
sprites to !Paint. You may also drag the icon to another application, or to
a directory viewer to save the sequence (the name is of the form "Monster*"
where * is !JSW's internal animation sequence number - this is not
important, but the sprite names are).
4.2.3.3 Monster movement
————————————————
To set the initial speed for the current monster, use the arrow icons
immediately below 'Speed'. The speed is shown between the arrows: the upper
one is the horizontal speed, the lower is the vertical speed. The direction
is shown by the four buttons above (follow their arrangement). These can be
clicked on to reverse direction if required.
By way of example, the left arrow decreases the speed if the monster is
moving right, starts it moving left if stationary, and increases its speed if
it's moving left. (This is the same as saying 'decreases the horizontal
component of its initial velocity' if we take 'right' as 'positive'.)
You'll notice that the horizontal speed is limited to 0, 2, 4, or 8 pixels
whereas the vertical speed can be any integer from 0 to 8.
Lifts cannot move horizontally, their vertical speed range is limited to 0,
1, 2, 4 or 8 pixels in either direction, and they are ALWAYS gridlocked.
Adjusting the speed may affect the movement bounds. The left and right bounds
are locked to multiples of the monster's horizontal speed (or 2 if zero); the
top and bottom bounds are similarly locked to the monster's vertical speed
(or 1 if zero). These are always rounded towards the monster.
It's easy to have things moving in one direction using the 'One dir' options.
As an example, say we want a drop of water to fall from the roof to the floor
below. First, put the drop in position and set its upper and lower bounds (we
don't want it to move horizontally). Set it moving downwards at, say, speed
4. Now click on the button marked 'V' and test it. It will fall, disappear
for a while, then reappear at its upper bound.
The length of time for which it is invisible depends on its speed and how far
it would have to move to reach, in this example, its upper bound. You can
make it appear there immediately on reaching its lower bound by setting the
'No delay' option.
The 'H' button works similarly to the 'V' button, but uses the left and right
bounds instead. You cannot have both 'H' and 'V' set at once!
Another example: if you had 'H' selected and the monster moving left to start
with, you would never see it moving right. You can have it moving vertically
as well if you like.
4.2.3.4 Animation sequence editing
——————————————————————————
Click Menu over the monster editing toolbox to access this window. It
contains two large(ish) boxes containing the sprites used for the directions
shown (note that 'right' overrides 'up' and 'down', and 'left' overrides
'right'). The individual frames have arrows either side of them to allow you
to step through the available sprites.
Below this, we have the 'X sets frame number' flag. This is specifically for
those sprites where all eight animation frames will fit into the same 16*16
space without moving said space. Maybe some diagrams will help - load the
file 'xFrame' (found within !JSW) into !Draw to see how it works.
Beside this, there's a flag indicating whether sprites created using this
sequence act as lifts or not. If you've ever played Jet Set Willy 2 you'll
know how these work - you can stand on them, but if you hit them from the
side or below...
The lifts use a few invisible platform types in order to do their job
properly. However, this will *not* cause bits of platform to be deleted
(unlike earlier releases).
You must leave the top nine pixel rows blank (ie. filled with black) in each
frame intended for use in a lift animation sequence or Miner Willy won't be
able to use it.
You won't be able to alter the flags described here if the animation sequence
is in use somewhere, either as a monster or as Miner Willy.
'Animate' runs the animation sequence. Click Select to see the left-hand
sequence, or Adjust for the right-hand sequence. Small but important: !JSW
doesn't know about reversed mouse buttons!
To the right of the animation frames, there are four buttons for common
animation sequences. They are designed to show how the sequence is built up
from the top left frame (frame 0). Each digit 1 to 7 represents the sprite
you would see if you clicked Select that number of times on the right arrow
beside frame 0. Click on the required button for instant animation sequence.
'OK' to accept the changes, and 'Cancel' to reject them.
4.2.3.5 Miscellaneous
—————————————
The 'Player' icon sets the animation sequence used for Miner Willy, which is
shown below. This sequence must have its 'X sets frame number' flag set (see
above).
Finally, the small Miner Willy allows you to return to map editing mode.
5 Event editing
—————————————
5.1 General
———————
You can edit the events for the current room by selecting 'Edit events...' in
the editing menu.
It is best to think of this window as 'Event' x is of 'Type' y and is
activated 'When' z.
'x': The currently selected event - one of eight possible - is shown, in the
event editing window, to the right of the word "Event"; click on one to
select that event for editing.
'y': Below this are the event types. Initially, "None" will be selected;
clicking on one of these causes the event to be of that type. The possible
types are:
- None: ignored completely;
- Scroll & move: an area of the room is 'scrolled' out of view, and the
player may, optionally, be moved;
- Move player: moves the player to a given location / room;
- Move monster: sets a new speed and optional position for a monster;
- Set monster bounds: sets new bounds for a monster;
- Enable/disable events: sets event states.
'z': The event is triggered when the player or one of the monsters is at a
specific position, all the objects in a room have been collected, or when a
specific switch is either on or off. (Note that missing switches are always
'on'.) Click on the required option to set it.
The room in which all the objects must be collected in order to trigger this
event is specified by using the arrows to the right of the option. Both the
room number and name are displayed; "-" means 'current room'.
The monster number (to the right of the "Monster" option) can be altered by
clicking Adjust on one in the current room, clicking on "Current", or by
using the arrows next to it. It is used to determine which monster to check
(if the event is dependent on a monster being in a specific place), and, for
the event types that affect a monster, which one is affected.
The coordinates (beside "is at") show the position which the monster or
player must be at before the event is triggered. (0,0) is at the top left of
the room, and (255,127) is the bottom right. The coordinates required are, as
usual, of the top left corner of the sprite, which means that, in practice,
the rightmost coordinate is 240 (or 246 if the sprite is animated with a
sequence which has the 'X position' bit set), and the lowest possible is 112.
The flags 'No X' and 'No Y', when selected, cause the X or Y position (as
appropriate) not to be checked.
Wherever input is expected, it must be registered by pressing RETURN.
You can input coordinates by clicking Select in the room editing window.
Exactly what coordinates are entered and where depends on where the caret is
- make sure it's in the right icon first!
For single icons, the coordinate will be entered and the caret advanced as if
RETURN had been pressed; for icon pairs (two icons with a comma between
them), both are filled in and the caret is not moved.
"Cancel" cancels the changes, "OK" accepts them.
The map editing window can only be used to reopen the current room while in
this mode.
You may also click Select on a blank part of the window to bring it to the
front; click Adjust instead to bring the room editing window to the front.
5.2 The event types in detail
—————————————————————————
5.2.1 Scroll and move
———————————————
The "Scroll area" box contains the area to be scrolled. Enter the coordinates
in the boxes provided (0 to 31 horizontally, 0 to 15 vertically - this works
on a map cell basis), and select a direction. A value may be entered in the
'keep ... rows/cols' in which case the indicated number of rows or columns
are retained after scrolling. Any value up to 30 may be entered here, though
if greater than the height or width (depending on scroll direction) then
(width-1) or (height-1) is used as appropriate.
The room number may be altered by clicking on the arrows in the "Go to room"
box; the coordinates to go to may be entered in the "Go to XY" box (again in
map cell format - 0 to 30 horizontally, 0 to 14 vertically, because we can't
place Miner Willy partly outside the playing area). If this box is not ticked
then Miner Willy will not be moved.
This event may only be triggered once, unless the 'keep rows/cols' value is
non-zero, in which case it is triggered whenever the trigger condition occurs
(becomes true) and then locked out until the condition is no longer true.
5.2.2 Move player
———————————
The room number may be altered by clicking on the arrows either side of it;
the coordinates to go to may be entered in the writeable icons below, in map
cell format - 0 to 30 horizontally, 0 to 14 vertically.
When this event is triggered, Miner Willy is moved to the specified location
in the specified room.
5.2.3 Move monster
————————————
This has, on the left, a group of 9 buttons which set where the monster will
move to (think of the box they are on as the monster's movement bounds).
Immediately to the right are:
- the coordinates to move to (see above, 'beside "is at"');
- "Move", which, when clear, only causes the monster's movement speed to be
changed (and also the coordinates boxes to be greyed out);
- "One use" meaning one use only while in this room;
- "Every other" meaning use every other time this event is triggered;
- "1", used only when "Every other" is set, meaning trigger first time if on,
second time if off.
You'll probably need "One use" set if the event is NOT triggered by the
monster's position.
To the right, we have the speed controls. These work in exactly the same way
as in monster editing mode, but only affect the monster when the event is
triggered.
Below, there are some bounce options. Each option represents an invisible
surface off which the monster will bounce - ie. '|' means that ⇦ becomes ⇨
and vice versa. (Warning - with the diagonal mirrors, be careful to ensure
the vertical velocity is, when applied horizontally, a valid horizontal
velocity!)
You can have either speed or bounce controls selected, but, clearly, not
both. To select which type to use, click on the box title - 'Speed' or
'Bounce monster'.
This event may be triggered more than once, unless the "Don't move" and "Use
once only" flags are both set.
5.2.4 Set monster bounds
——————————————————
This has four writeable boxes, each one described by the text to its left.
For example, the box described as "Right" sets the monster's right bound to
the given X coordinate. The bounds default to the monster's initial bounds,
so you don't have to change them all if you don't want to.
Clicking Select in the room editing window alters the bounding box in exactly
the same way as Adjust in monster editing mode (except that dragging won't
work).
This event may only be triggered once.
5.2.5 Enable/disable events
—————————————————————
This event, when triggered, causes selected events to be enabled or disabled.
Events which have been disabled because they are "once only" events cannot be
re-enabled. One column is used per event number.
5.3 Initial states
——————————————
Remember that, when entering a room, all events are in their initial
(untriggered) state, though they are immediately checked to see if any should
be triggered, instantly and invisibly. The restrictions on "scroll & move"
present in previous versions (scrolling anything that's there, even parts of
monsters) have been lifted.
6 Menus
—————
6.1 The map editor menu
———————————————————
Accessed from the map editing window.
'Go to room' allows you to go to any room quickly and easily. There is a
writable icon between two arrow icons, in which the room number is entered;
the arrows can be used to adjust the room number. The name of the room
specified is shown below; click on OK to select that room for editing, or
Cancel to ignore.
For the other options, see §6.3 "The main menu".
6.2 The room editing menu
—————————————————————
Accessed by clicking Menu over the room editing window.
For the first four options, the pointer will look like the appropriate
character or object from the original game. You can move between rooms as
normal; click Select within the map editing window to set the position or
select the monster, or click Adjust to cancel the operation. The pointer(s)
used are given in brackets at the end of each description; the definitions
can be found in the file 'Sprites'.
'Set start square' allows you to set Miner Willy's start position, eg. by the
bath in The Bathroom. (ptr_start)
'Set target square' allows you to set Miner Willy's target position, eg. the
bed in the Master Bedroom. This is where you must take Miner Willy when all
the objects have been collected - he will automatically walk right from here
until he reaches the finish sprite. (ptr_target)
'Set guard sprite' allows you to set the monster guarding the target
position, eg. Maria the housekeeper in the Master Bedroom. This monster will
disappear when all the objects have been collected. The 'right-hand' frames
are used when any part of Miner Willy is at the same height as the guard -
all four when within 15 pixels, the last two when within 7 pixels, and the
last one only when within 3 pixels. (ptr_guard)
'Set finish sprite' allows you to set the monster guarding the target
position, eg. the toilet in The Bathroom. This monster will
disappear when all the objects have been collected. To help you, the monsters
are shown while in this mode. The 'right-hand' frames are only used
when Miner Willy reaches this monster after arriving at the target square.
(ptr_finish)
'Set teleport' allows you to place a new teleport or change the source or
destination of an existing one. Click once to place or choose either the
source or the destination. The pointer will change shape, indicating that you
should now place the new source or destination, changing room if necessary.
Clicking on one end of a teleport and then again somewhere else *in the same
room* will move that end; clicking in another room will move the other end.
(ptr_puttran, ptr_putdest, ptr_putsrc)
'Delete teleport', as its name suggests, deletes the next teleport you click
on - source or destination will do. (ptr_deltran)
'Set rope position' - only available if the current room contains a rope -
allows you to set where the rope is attached. Use the arrows in the dialogue
box to position it - the allowed range is -63 to +63 pixels, relative to the
rope's default position.
'Edit events' leads to a dialogue box which allows you to create and edit up
to eight events in the current room.
'Go to room' - see the editor menu.
'Restore room' restores the room to its previous layout, including scenery
sprites and types, monsters, and events. The room is stored whenever you save
it or the game, or play or test the game. Loading a room cannot be undone in
this way (yet).
'Clear room' wipes the room completely (teleports are left intact). It can be
restored using 'Restore room'.
'Clear unused data' wipes all the rooms which cannot be reached, and all
sprites and animation sequences which are not used in the remaining rooms. A
room can be reached if there is a route to it from the start room, or if
there is a teleport to it from another room, which itself must be reachable.
(The main use of this is to get rid of old rooms which are no longer needed,
and which may contain collectables. It can also improve the compression ratio
of the file.) *** This is irreversible.
'Edit' - see §6.3 "The main menu".
'Grid lock' is a flag. When set, new monsters and changes to movement bounds
are locked to a 32*16 grid (which just happens to be the room size).
6.3 The main menu
—————————————
Accessed from the icon bar.
'Info' - well...
'Play game' is obvious.
'Options' leads to a dialogue box - see §6.4 "The Options dialogue box".
'Edit' leads to a submenu containing three options:
- 'Game', which opens the map editing window;
- 'Monster sprites', 'Scenery sprites' and 'Background sprites' which each
export the relevant sprites to !Paint, first running it if necessary;
- 'Author' is where you enter your name. You have 32 charaters in which to do
so.
- 'JSW 1 turn type' which, when ticked, causes Miner Willy to turn as he
would in Manic Miner and JSW (as opposed to JSW2);
- 'Statistics' just shows you some game statistics - how many rooms etc.
'Test game' is similar to 'Play game' but Miner Willy is missing. It's simple
to use:
Z left ' up P single step Space next frame
X right / down R normal speed Escape exit to desktop
and 1 to 8 to activate events 1 to 8.
'Save' leads to a submenu containing:
- 'Game', meaning 'save game' :-)
- 'Monster sprites', obvious;
- 'Scenery sprites', obvious;
- 'Background sprites', obvious;
- 'Animation sequences', to save the animation data on its own;
- 'Current room', to save the current room (everything about it except exits,
teleports and event data)
- 'Current scenery', to save the scenery sprite details for the current room;
- 'Open save dir', to open the directory "JSW:JSW files".
Any option described as 'to save...' may be clicked on to save the file to
"JSW:JSW files" - this also happens if no pathname is supplied for its save
box (except then you don't get a default name). The default names are:
Game JSWfile (only if <Clear=>Menu.Clear> selected)
Monster sprites Monsters
Scenery sprites Scenery
Background sprites BgndSprs
Animation sequences Animation
Current room Room_x (x is the room number)
Current scenery Blocks_x
'Clear' wipes the current game file (sprites included) from memory so that
you can start afresh with blank screens, blank sprites, and no animation.
'Help' leads to a submenu containing two options:
- 'Interactive', which runs the !Help application, if it isn't already
running, and will open the interactive help window;
- 'Manual': there are two copies of the JSW manual, one in StrongHelp 2
format, the other in plain text format. JSW will try to load the StrongHelp
manual first; if this fails, the plain text manual is loaded instead.
'Quit' is very obvious.
6.4 The Options dialogue box
————————————————————————
- 'Temporary immunity to monsters' - see the introduction section.
- 'Spectrum-style rope climbing' - when on, you can use left and right to
climb the ropes exactly as in the Spectrum version.
- 'Pulse effect for collectables' - when on, the collectable objects are
shown as pulsing between full and half brightness; when off, the flicker
effect is used (invisible once in every 8 frames).
- 'Manic Miner disintegration' - when on, disintegrating platforms 'sink'.
- 'Use fade routine' - when on, uses a top-to-bottom fade effect for the
title page, when you 'press SPACE to start', or press ESCAPE while playing.
- 'Use full VGA screen' - only if you're using a VGA monitor or better: when
not selected (or if there's not enough memory), you get a small display in
the middle of the screen (yes, a letterbox mode, but I've squashed it
horizontally as well), and when selected, you get a full size display with
a speed penalty - it may run a bit slowly on ARM2 and (just possibly)
ARM250 based machines (but then I've made it as fast as I can without
completely rewriting my plotting routines). This option is ignored if